package com.atguigu1.core.operator

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 *
 * @description: combineByKey案例
 * @time: 2021-03-12 11:45
 * @author: baojinlong
 **/
object Spark28Cogroup {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("rdd")
    // 设置rdd分区数字
    val sparkContext = new SparkContext(conf)
    // 排序后分区数量不变 hash range分区 python分区是私有的
    val rddValue1: RDD[(String, Int)] = sparkContext.makeRDD(Seq(("a", 1), ("b", 2), ("a", 100)))
    val rddValue2: RDD[(String, Int)] = sparkContext.makeRDD(Seq(("b", 5), ("a", 4), ("c", 6), ("c", 7)))
    // 两个不同数据源的数据,相同的key的value会连接在一起,形成元组,如果两个数据源中key没有匹配上,那么数据不会出现在结果中
    // 如果两个数据源中key有多个相同的会依次匹配可能会出现笛卡尔积,数据量会几何增长导致性能降低
    rddValue1.cogroup(rddValue2).collect.foreach(println)
    sparkContext.stop()
  }
}
